题目描述
找出字符串中第一个只出现一次的字符
输入描述:
输入一个非空字符串
输出描述:
输出第一个只出现一次的字符,如果不存在输出-1
示例1
输入
asdfasdfo
输出
o
思路:注意没有的情况;所以先将所有出现一次的加入列表;然后列表为空则打印-1,其他打印第一个
while True:
try:
string=input().strip()
result=[]
for each in string:
if string.count(each)==1:
result.append(each)
if result:
print(result[0])
else:
print('-1')
except:
break
java没有计算次数
思路一:通过删除字符deleteCharAt(i)构成的子串判断有木有该字符,没有则只出现一次;用到.toString().contains()
用flag位来记录
用索引i遍历,charAt(i)得到每个字符
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
String str=in.nextLine();
if (str==null || str.length()==0)//前两种情况要注意单独判断
System.out.println(-1);
else if(str.length()==1)
System.out.println(str);
else{
boolean flag=false;
for(int i=0;i<str.length();i++){
StringBuffer sb=new StringBuffer(str);
StringBuffer sub=sb.deleteCharAt(i);//删除某一元素的子串,判断是否还包含,不包含就出现一次
if(!sub.toString().contains(str.charAt(i)+"")){//whyif(!sub.toString().contains(str.charAt(i)))不行
System.out.println(str.charAt(i));
flag=true;
break;
}
}
if(flag==false)
System.out.println(-1);
}
}
}
}
思路二:判断字符的首次出现和最后一次出现index是否相同,相同则表示只出现一次
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
String str=in.nextLine();
if (str==null || str.length()==0)//前两种情况要注意单独判断
System.out.println(-1);
else if(str.length()==1)
System.out.println(str);
else{
boolean flag=false;
for(char c:str.toCharArray()){//用foreach的方法得到每个字符
if(str.indexOf(c)==str.lastIndexOf(c)){//判断首次出现index和最后一次出现index
System.out.println(c);
flag=true;
break;
}
}
if(flag==false)
System.out.println(-1);
}
}
}
}