2 条题解

  • 3
    @ 2023-8-1 19:24:23

    yasuo👀️

    #include <bits/stdc++.h>
    int main(){
        std::string q;int flag[26]={};getline(std::cin,q);
        for(int i=0;i<q.length();i++)flag[q[i]-'a']++;
        for(int i=0;i<q.length();i++)if(flag[q[i]-'a']==1){std::cout<<q[i];return 0;}
        std::cout<<"no";return 0;}
    
    • 1
      @ 2023-7-2 18:01:12

      方法一: 两个方向优化时间:

      1. strlen() 一次性算出来,不要在循环中多次计算
      2. 从前往后遍历时,如果a[i ]== a[j],可以令a[j ] = '*' ,特殊字符作为标志,这样,如果后面的循环中遇到 a[i] = '*' 【外层循环】 和 a[j] = '*' 【内层循环】 的情况,完全可以直接跳过该轮循环,优化时间
      #include<stdio.h>
      #include<string.h>
      char a[100005];
      
      int main(){
          int f = 0;
          scanf("%s" , a);
          int ll = strlen(a);
          for(int i = 0;i < ll;i++){
              int x = 0;
              if(a[i] == '*')
                  continue;
              for(int j = i+1;j < ll;j++){
                  if(a[j] == '*')
                      continue;
                  if(a[i] == a[j])
                      {
                          x= 1;
                          a[j] = '*';
                          continue;
                      }
              }
              if(x == 0){
                  printf("%c",a[i]);
                  f = 1;
                  break;
              }
      
          }
          if(f == 0)
              printf("no");
          return 0;
      }
      

      方法二: 两个方向优化时间:

      1. strlen() 一次性计算出来,不要放到循环中多次计算
      2. 利用计时器【一般是int 数组】,存入26个0,表示a-z 每个字符出现的次数,然后从前往后遍历字符串,判定每个字符在计时器对应的位置的数值【即出现了几次】,如果遇到为1的情况,直接输出该字符,break结束。如果没有,则输出no
      #include<stdio.h>
      #include<string.h>
      int a[26];
      char b[100005];
      int main(){
          memset(a,0,sizeof(a));
          char c;
          int i = 0;
          int f =0;
          scanf("%s",b);
          int bl = strlen(b);
          for(int i =0;i < bl;i++){
              int x = b[i] - 97;
              a[x] = a[x] + 1;
          }
      
          for(int i =0; i < bl;i++){
              int x = b[i] - 97;
              if(a[x] == 1){
                  printf("%c",b[i]);
                  f = 1;
                  break;
              }
          }
          if(f == 0)
              printf("no");
          return 0;
      }
      
      • 1

      找第一个只出现一次的字符

      信息

      ID
      210
      时间
      1000ms
      内存
      128MiB
      难度
      4
      标签
      递交数
      120
      已通过
      55
      上传者